import os
import time
from shutil import copyfile
import json

# 原分类好声音的文件
voice_path = 'E:/Virtual/gitee/voice-mp3'
# json输出路径
json_path = 'json/voice.json'
# json输出路径
target_path = 'page/voices'
# 筛选其中的文件类型
choose_file = ['.mp3', '.wav']


# 判断是否是第一次生成json
def judge_first_json():
    if os.path.exists(json_path):
        print("json文件已经存在，不是第一次生成")
        return False
    else:
        print("第一次生成json")
        return True


# json字串 内含属性：name（显示名称），cate（分类栏），date（日期），file（对应音频文件）
def json_dict(cate, item, index):
    m_time = os.path.getmtime(f'{voice_path}/{cate}/{item}')
    voice = {'cate': cate,
             'name': item[0:-4],
             'date': time.strftime('%Y-%m-%d', time.localtime(m_time)),
             'file': f'tbbt-{index}.mp3'}
    return voice


# 第一次生成json的处理
def create_json():
    voice_list = []
    voice_index = 0
    for cate in os.listdir(voice_path):
        for item in os.listdir(f'{voice_path}/{cate}'):
            if judge_file(item):
                voice_list.append(json_dict(cate, item, voice_index))
                voice_index += 1
    file = open(json_path, 'w')
    file.write(json.dumps(voice_list, indent=4, separators=(',', ': ')))
    file.close()


# 更新json的处理
def update_json():
    file = open(json_path, 'r')
    voice_list = json.loads(file.read())
    file.close()

    voice_index = len(voice_list)
    for cate in os.listdir(voice_path):
        for item in os.listdir(f'{voice_path}/{cate}'):
            if not judge_in_json(item[0:-4], voice_list):
                voice_list.append(json_dict(cate, item, voice_index))
                voice_index += 1
    file = open(json_path, 'w')
    file.write(json.dumps(voice_list, indent=4, separators=(',', ': ')))
    file.close()


# 判断文件是否为需要的类型
def judge_file(name):
    for tail in choose_file:
        if tail in name:
            return True
    return False


# 判断文件是否已经记录在json中
def judge_in_json(name, voice_list):
    for obj in voice_list:
        if name == obj['name']:
            print(f'{name}已存在')
            return True
    return False


# 读取json，将文件转移到临时文件夹并命名
def copy_to_target():
    file = open(json_path, 'r')
    voice_list = json.loads(file.read())
    file.close()
    for obj in voice_list:
        copy_source = f'{voice_path}/{obj["cate"]}/{obj["name"]}.mp3'
        copy_to = f'{target_path}/{obj["file"]}'
        copyfile(copy_source, copy_to)


def main():
    if judge_first_json():
        create_json()
    else:
        update_json()
    copy_to_target()


if __name__ == '__main__':
    main()
